package annuairebikfaya;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author pfares
 */
public class ListeNumTel implements IListeNumTel {
    List<NumTel> ltels;

    public ListeNumTel() {
        ltels = new ArrayList<NumTel>();
    }
    public ListeNumTel(NumTel num) {
        this();
        ajouterDebut(num);
    }

    public boolean ajouterFin(NumTel num) {
        ltels.add(ltels.size(), num);
        return true;

    }

    public boolean ajouterDebut(NumTel num) {
        ltels.add(0, num);
        return true;

    }

    public boolean ajouter(int index, NumTel num) {
        ltels.add(index, num);
        return true;
    }

    public NumTel premierNumero() {

        return ltels.get(0);
    }

    public NumTel numero(int index) {
        return ltels.get(index);
    }

    public boolean contientNumero(int num) {
        return ltels.contains(new NumTel(num));
    }

    /**
     * retourne le nombre de numéros de la liste (>=1).
     * @return nombre de numéros présents dans la liste.
     */
    public int nbNumeros() {
        return ltels.size();
    }

    /**
     * Retourne dans une chaîne de caractères la séquence des numéros contenu dans
     * cette liste. Dans la chaîne résultat les numéros sont séparés par des virgules.
     * <BR>
     * exemple:<BR><pre>
     * 0476088634 (D), 0654789045 (P), 0476615277 (T)
     * </pre><BR>
     * @return la chaine contenant la séquence des numéros.
     */
    @Override
    public String toString() {
        String res = "(";
        for (NumTel nt : ltels) {
            res += nt.toString() + ",";
        }
        return res + ")";
    }

    /**
     * Renvoie un itérateur sur les numéros de téléphone contenus dans la liste.
     *
     * @return un iterateur permettant le parcours des numéros de la liste
     */
    public Iterator<NumTel> iterator() {
        return (ltels.iterator());
    }

    /**
     * Enlève un numéro de la liste, cette opération n'est possible que si la liste
     * contient au moins deux numéros (nbNumero()>1). Si la liste ne contient contient
     * qu'un seul numéro cette opération est sans effet. De même si le numéro spécifié
     * n'est pas présent dans la liste.<br>
     * Cette méthode retourne un booléen qui indique si cette liste de numéros de téléphone
     * a été affectée par l'opération de retrait.
     *
     * @param num le numero à enlever.
     *
     * @return <code>true</code> si un NumTel dont le numéro est num a été retiré de la liste,
     *         <code>false</code> si la liste ne contient plus qu'un seul numéro ou si il n'y
     *         a pas dans la liste de NumTel de numéro num.
     */
    public boolean retirer(int num) {
        return (ltels.remove(new NumTel(num)));
    }
}
